---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.12.0
  labels:
    heritage: deckhouse
    module: node-manager
    cluster.x-k8s.io/provider: cluster-api
  name: machinesets.cluster.x-k8s.io
spec:
  group: cluster.x-k8s.io
  names:
    categories:
      - cluster-api
    kind: MachineSet
    listKind: MachineSetList
    plural: machinesets
    singular: machineset
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: Cluster
          jsonPath: .spec.clusterName
          name: Cluster
          type: string
        - description: Total number of machines desired by this machineset
          jsonPath: .spec.replicas
          name: Desired
          priority: 10
          type: integer
        - description: Total number of non-terminated machines targeted by this machineset
          jsonPath: .status.replicas
          name: Replicas
          type: integer
        - description: Total number of ready machines targeted by this machineset.
          jsonPath: .status.readyReplicas
          name: Ready
          type: integer
        - description: Total number of available machines (ready for at least minReadySeconds)
          jsonPath: .status.availableReplicas
          name: Available
          type: integer
        - description: Time duration since creation of MachineSet
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
        - description: Kubernetes version associated with this MachineSet
          jsonPath: .spec.template.spec.version
          name: Version
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: MachineSet is the Schema for the machinesets API.
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: MachineSetSpec defines the desired state of MachineSet.
              properties:
                clusterName:
                  description: ClusterName is the name of the Cluster this object belongs
                    to.
                  minLength: 1
                  type: string
                deletePolicy:
                  description: DeletePolicy defines the policy used to identify nodes
                    to delete when downscaling. Defaults to "Random".  Valid values
                    are "Random, "Newest", "Oldest"
                  enum:
                    - Random
                    - Newest
                    - Oldest
                  type: string
                minReadySeconds:
                  description: MinReadySeconds is the minimum number of seconds for
                    which a newly created machine should be ready. Defaults to 0 (machine
                    will be considered available as soon as it is ready)
                  format: int32
                  type: integer
                replicas:
                  default: 1
                  description: Replicas is the number of desired replicas. This is a
                    pointer to distinguish between explicit zero and unspecified. Defaults
                    to 1.
                  format: int32
                  type: integer
                selector:
                  description: 'Selector is a label query over machines that should
                  match the replica count. Label keys and values that must match in
                  order to be controlled by this MachineSet. It must match the machine
                  template''s labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors'
                  properties:
                    matchExpressions:
                      description: matchExpressions is a list of label selector requirements.
                        The requirements are ANDed.
                      items:
                        description: A label selector requirement is a selector that
                          contains values, a key, and an operator that relates the key
                          and values.
                        properties:
                          key:
                            description: key is the label key that the selector applies
                              to.
                            type: string
                          operator:
                            description: operator represents a key's relationship to
                              a set of values. Valid operators are In, NotIn, Exists
                              and DoesNotExist.
                            type: string
                          values:
                            description: values is an array of string values. If the
                              operator is In or NotIn, the values array must be non-empty.
                              If the operator is Exists or DoesNotExist, the values
                              array must be empty. This array is replaced during a strategic
                              merge patch.
                            items:
                              type: string
                            type: array
                        required:
                          - key
                          - operator
                        type: object
                      type: array
                    matchLabels:
                      additionalProperties:
                        type: string
                      description: matchLabels is a map of {key,value} pairs. A single
                        {key,value} in the matchLabels map is equivalent to an element
                        of matchExpressions, whose key field is "key", the operator
                        is "In", and the values array contains only "value". The requirements
                        are ANDed.
                      type: object
                  type: object
                  x-kubernetes-map-type: atomic
                template:
                  description: Template is the object that describes the machine that
                    will be created if insufficient replicas are detected. Object references
                    to custom resources are treated as templates.
                  properties:
                    metadata:
                      description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata'
                      properties:
                        annotations:
                          additionalProperties:
                            type: string
                          description: 'Annotations is an unstructured key value map
                          stored with a resource that may be set by external tools
                          to store and retrieve arbitrary metadata. They are not queryable
                          and should be preserved when modifying objects. More info:
                          http://kubernetes.io/docs/user-guide/annotations'
                          type: object
                        labels:
                          additionalProperties:
                            type: string
                          description: 'Map of string keys and values that can be used
                          to organize and categorize (scope and select) objects. May
                          match selectors of replication controllers and services.
                          More info: http://kubernetes.io/docs/user-guide/labels'
                          type: object
                      type: object
                    spec:
                      description: 'Specification of the desired behavior of the machine.
                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status'
                      properties:
                        bootstrap:
                          description: Bootstrap is a reference to a local struct which
                            encapsulates fields to configure the Machine’s bootstrapping
                            mechanism.
                          properties:
                            configRef:
                              description: ConfigRef is a reference to a bootstrap provider-specific
                                resource that holds configuration details. The reference
                                is optional to allow users/operators to specify Bootstrap.DataSecretName
                                without the need of a controller.
                              properties:
                                apiVersion:
                                  description: API version of the referent.
                                  type: string
                                fieldPath:
                                  description: 'If referring to a piece of an object
                                  instead of an entire object, this string should
                                  contain a valid JSON/Go field access statement,
                                  such as desiredState.manifest.containers[2]. For
                                  example, if the object reference is to a container
                                  within a pod, this would take on a value like: "spec.containers{name}"
                                  (where "name" refers to the name of the container
                                  that triggered the event) or if no container name
                                  is specified "spec.containers[2]" (container with
                                  index 2 in this pod). This syntax is chosen only
                                  to have some well-defined way of referencing a part
                                  of an object. TODO: this design is not final and
                                  this field is subject to change in the future.'
                                  type: string
                                kind:
                                  description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                  type: string
                                name:
                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                  type: string
                                namespace:
                                  description: 'Namespace of the referent. More info:
                                  https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                                  type: string
                                resourceVersion:
                                  description: 'Specific resourceVersion to which this
                                  reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                                  type: string
                                uid:
                                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                                  type: string
                              type: object
                              x-kubernetes-map-type: atomic
                            dataSecretName:
                              description: DataSecretName is the name of the secret
                                that stores the bootstrap data script. If nil, the Machine
                                should remain in the Pending state.
                              type: string
                          type: object
                        clusterName:
                          description: ClusterName is the name of the Cluster this object
                            belongs to.
                          minLength: 1
                          type: string
                        failureDomain:
                          description: FailureDomain is the failure domain the machine
                            will be created in. Must match a key in the FailureDomains
                            map stored on the cluster object.
                          type: string
                        infrastructureRef:
                          description: InfrastructureRef is a required reference to
                            a custom resource offered by an infrastructure provider.
                          properties:
                            apiVersion:
                              description: API version of the referent.
                              type: string
                            fieldPath:
                              description: 'If referring to a piece of an object instead
                              of an entire object, this string should contain a valid
                              JSON/Go field access statement, such as desiredState.manifest.containers[2].
                              For example, if the object reference is to a container
                              within a pod, this would take on a value like: "spec.containers{name}"
                              (where "name" refers to the name of the container that
                              triggered the event) or if no container name is specified
                              "spec.containers[2]" (container with index 2 in this
                              pod). This syntax is chosen only to have some well-defined
                              way of referencing a part of an object. TODO: this design
                              is not final and this field is subject to change in
                              the future.'
                              type: string
                            kind:
                              description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                              type: string
                            name:
                              description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                              type: string
                            namespace:
                              description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                              type: string
                            resourceVersion:
                              description: 'Specific resourceVersion to which this reference
                              is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                              type: string
                            uid:
                              description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                              type: string
                          type: object
                          x-kubernetes-map-type: atomic
                        nodeDeletionTimeout:
                          description: NodeDeletionTimeout defines how long the controller
                            will attempt to delete the Node that the Machine hosts after
                            the Machine is marked for deletion. A duration of 0 will
                            retry deletion indefinitely. Defaults to 10 seconds.
                          type: string
                        nodeDrainTimeout:
                          description: 'NodeDrainTimeout is the total amount of time
                          that the controller will spend on draining a node. The default
                          value is 0, meaning that the node can be drained without
                          any time limitations. NOTE: NodeDrainTimeout is different
                          from `kubectl drain --timeout`'
                          type: string
                        nodeVolumeDetachTimeout:
                          description: NodeVolumeDetachTimeout is the total amount of
                            time that the controller will spend on waiting for all volumes
                            to be detached. The default value is 0, meaning that the
                            volumes can be detached without any time limitations.
                          type: string
                        providerID:
                          description: ProviderID is the identification ID of the machine
                            provided by the provider. This field must match the provider
                            ID as seen on the node object corresponding to this machine.
                            This field is required by higher level consumers of cluster-api.
                            Example use case is cluster autoscaler with cluster-api
                            as provider. Clean-up logic in the autoscaler compares machines
                            to nodes to find out machines at provider which could not
                            get registered as Kubernetes nodes. With cluster-api as
                            a generic out-of-tree provider for autoscaler, this field
                            is required by autoscaler to be able to have a provider
                            view of the list of machines. Another list of nodes is queried
                            from the k8s apiserver and then a comparison is done to
                            find out unregistered machines and are marked for delete.
                            This field will be set by the actuators and consumed by
                            higher level entities like autoscaler that will be interfacing
                            with cluster-api as generic provider.
                          type: string
                        version:
                          description: Version defines the desired Kubernetes version.
                            This field is meant to be optionally used by bootstrap providers.
                          type: string
                      required:
                        - bootstrap
                        - clusterName
                        - infrastructureRef
                      type: object
                  type: object
              required:
                - clusterName
                - selector
              type: object
            status:
              description: MachineSetStatus defines the observed state of MachineSet.
              properties:
                availableReplicas:
                  description: The number of available replicas (ready for at least
                    minReadySeconds) for this MachineSet.
                  format: int32
                  type: integer
                conditions:
                  description: Conditions defines current service state of the MachineSet.
                  items:
                    description: Condition defines an observation of a Cluster API resource
                      operational state.
                    properties:
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another. This should be when the underlying condition changed.
                          If that is not known, then using the time when the API field
                          changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition. This field may be empty.
                        type: string
                      reason:
                        description: The reason for the condition's last transition
                          in CamelCase. The specific API may choose whether or not this
                          field is considered a guaranteed API. This field may not be
                          empty.
                        type: string
                      severity:
                        description: Severity provides an explicit classification of
                          Reason code, so the users or machines can immediately understand
                          the current situation and act accordingly. The Severity field
                          MUST be set only when Status=False.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                          Many .condition.type values are consistent across resources
                          like Available, but because arbitrary conditions can be useful
                          (see .node.status.conditions), the ability to deconflict is
                          important.
                        type: string
                    required:
                      - lastTransitionTime
                      - status
                      - type
                    type: object
                  type: array
                failureMessage:
                  type: string
                failureReason:
                  description: "In the event that there is a terminal problem reconciling
                  the replicas, both FailureReason and FailureMessage will be set.
                  FailureReason will be populated with a succinct value suitable for
                  machine interpretation, while FailureMessage will contain a more
                  verbose string suitable for logging and human consumption. \n These
                  fields should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over time (like
                  service outages), but instead indicate that something is fundamentally
                  wrong with the MachineTemplate's spec or the configuration of the
                  machine controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in
                  the spec, values that are unsupported by the machine controller,
                  or the responsible machine controller itself being critically misconfigured.
                  \n Any transient errors that occur during the reconciliation of
                  Machines can be added as events to the MachineSet object and/or
                  logged in the controller's output."
                  type: string
                fullyLabeledReplicas:
                  description: The number of replicas that have labels matching the
                    labels of the machine template of the MachineSet.
                  format: int32
                  type: integer
                observedGeneration:
                  description: ObservedGeneration reflects the generation of the most
                    recently observed MachineSet.
                  format: int64
                  type: integer
                readyReplicas:
                  description: The number of ready replicas for this MachineSet. A machine
                    is considered ready when the node has been created and is "Ready".
                  format: int32
                  type: integer
                replicas:
                  description: Replicas is the most recently observed number of replicas.
                  format: int32
                  type: integer
                selector:
                  description: 'Selector is the same as the label selector but in the
                  string format to avoid introspection by clients. The string will
                  be in the same format as the query-param syntax. More info about
                  label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors'
                  type: string
              type: object
          type: object
      served: true
      storage: true
      subresources:
        scale:
          labelSelectorPath: .status.selector
          specReplicasPath: .spec.replicas
          statusReplicasPath: .status.replicas
        status: {}
